Motivación

Creé este documento durante el último fin de semana de diciembre del 2025, cuando Colfuturo anunció que el gobierno nacional no apoyaría más al programa Crédito-Beca.

En respuesta, el ministerio de ciencia y tecnología publicó un comunicado en su cuenta de instagram donde señalaba que no habían comunicado a Colfuturo la decisión de “desmontar” el programa Crédito-Beca, y en donde argumentaban que planeaban utilizar los recursos que antes le eran otorgados a Colfuturo, para gestionar, desde el gobierno, el apoyo a posgrados en el exterior. El ministerio también publicó una gráfica en la que sugieren que la mayoría de los beneficiarios del programa pertenece a los estratos 4, 5 y 6.

Como consecuencia, Colfuturo publicó su proprio conteo de porcentajes, y tres notas aclaratorias, en las que señalaban que su gestión había sido transparente, y que toda la información relevante está disponible en su sitio web.

Así, en aras de entender un poco más las dinámicas de selección de acuerdo al estrato, utilicé los datos disponibles en los anuarios e informes anuales de gestión, para realizar algunos gráficos descriptivos, y estimar (con cautela) 1) la probabilidad marginal de que la aplicación al programa Crédito-Beca de una persona perteneciente a cualquier estrato sea exitosa, y 2) la probabilidad marginal que una persona de cualquier estrato tiene de ser elegida para ser beneficiaria, condicional a que su aplicación al programa Crédito-Beca haya sido exitosa.

Sobre los datos

Como he mencionado antes, he recopilado los datos en los que se basan las visualizaciones y análisis que presento acá de los anuarios e informes de gestión anuales que colfuturo publica en su página web. Sin embargo, creo que es importante señalar que los datos no están en un formato fácilmente utilizable, y su mayoría está consignada en tablas que aparecen en PDFs. También debo mencionar que los datos del periodo 2007 al 2024 no están completos. En particular, Colfuturo no publica la distribución del total de aplicaciones de los años 2007 al 2012. Finalmente, revisando estos documentos, noté que Colfuturo reporta el número de beneficiarios de un año, como el número de aplicaciones aprobadas de ese mismo año, pero al año siguiente.

Por ejemplo para el año 2008, Colfuturo reportó haber escogido como beneficiarios a un total de 573 personas.

Sin embargo, en el año 2009, el total de beneficiarios reportados, para el 2008, disminuyó a 499.

Con esto no sugiero ningún tipo de mala fe. Muy seguramente los beneficiarios al cierre de un año pueden disminuir si en algún punto alguna persona, avanzada en el proceso de legalización, renuncia al programa (Colfuturo incluye una proporción de personas que renuncia en sus informes anuales y en los anuarios). En cualquier caso, este es un patrón en el reporte anual de beneficiarios por estrato.

Descriptivos

Total de Solicitudes, Solicitudes Aprobadas, y Benecifiarios en el periodo 2007 - 2024.

Aunque no cuento con el total de Solicitudes (S) realizadas entre el año 2004 y el 2012, la distribución de Solicitudes Aprobadas (SA) puede inferirse del patrón que describí en la sección anterior. Así, una suposición justificable es que el número de Aplicaciones Aprobadas, por estrato, es, al menos, el total de Beneficiarios (B) que Colfuturo reporta por cada año vencido.

Solicitudes por estrato

A continuación se encuentran el conteo y proporción del total de S, discriminadas por estrato, que Colfuturo recibió para el programa crédito-beca, entre los años 2013 y 2024.

Como mencioné antes, estos datos no están disponibles para el periodo entre 2007 y 2012.

Estos datos muestran que entre el 2013 y el 2024, los estratos 1 al 3 contribuyeron cerca del 36% de las aplicaciones, y los estratos 4 al 6 el 64%.

Solicitudes Aprobadas por estrato (2008 - 2024)

Utilizando los datos por año vencido, se puede inferir el número de SA por estrato desde el 2008 hasta el 2012. Desde el 2013, Colfuturo reporta la distribución de S, SA, y B.

Entre el 2008 y el 2024, los estratos 1 al 3 obtuvieron el 30% del total de SA. Los estratos 4 al 6, el 70% del total.

Beneficiarios por Estrato (2007 - 2024)

Finalmente, los datos disponibles permiten inferir el número de B entre el 2007 y el 2024.

Quisiera resaltar esta última gráfica, ya que se ajusta bastante bien a los datos compartidos por Colfuturo en su post de X.

Estrato Reportados por Colfuturo Proporción Empírica
\(1\) \(1\%\) \(1\%\)
\(2\) \(5\%\) \(4.3\%\)
\(3\) \(20\%\) \(19.5\%\)
\(4\) \(33\%\) \(33.8\%\)
\(5\) \(21\%\) \(21.8\%\)
\(6\) \(20\%\) \(19.6\%\)
Total \(100\%\) \(100\%\)

Estimación de Probabilidad Marginal

Advertencia

Antes de continuar, quisiera aclarar que con este análisis no estoy buscando establecer ningún vínculo causal. Las herramientas estadísticas que utilizo acá solo pueden sugerir predicciones dado que, en su estado actual, los estadísticos estimados no han sido especificados usando un modelo causal que ajuste por variables no observadas, y que podrían predecir el éxito en el proceso.

Este es un ejercicio meramente exploratorio y predictivo, en el que la probabilidad de éxito está simplemente condicionada a 1) haber decidido aplicar al programa y 2) haber sido seleccionado para legalizar el crédito-beca.

(Cortos) Detalles metodológicos

Usando un modelo lineal generalizado (distribución binomial, logit link) con cros-clasificación (la probabilidad de SA y B varía de acuerdo al año de selección), estimé la probabilidad marginal, por estrato, de obtener una SA, y de ser B, condicional a obtener una SA.

Probabilidad de SA, condicional a S

En lo que sigue muestro el código en R que he utilizado para correr los análisis. Personas familiarizadas con el trabajo de Richard McElreath1 encontrarán que aplico, tanto su gramática de modelos, como sus supuestos implícitos para el análisis de los modelos.

Subset de datos para los análisis:

# Exclude data with missing values. Complete-case analysis is called for since data is
# not missing at random.
final_df_no_2007 <- final_df|> 
  filter(years != 2007) |> 
  select(c(1:5))

final_df_2013_onwards <- final_df|> 
  filter(years > 2012) |> 
  select(c(1:5))

# Lists with data for ulam
## Beneficiary conditional on approved
d_2008_onwards <- list(
  success = final_df_no_2007$beneficiarixs, # beneficiaries
  pre_success = final_df_no_2007$aprobadas, # approved
  estrato = final_df_no_2007$estrato,
  year = as.numeric(as.factor(final_df_no_2007$years))
)

## Approved conditional on applying
d_2013_onwards <- list(
  solicitudes = final_df_2013_onwards$solicitudes, # applications
  pre_success = final_df_2013_onwards$aprobadas,   # approved
  estrato = final_df_2013_onwards$estrato,
  year = as.numeric(as.factor(final_df_2013_onwards$years))
)

Modelo:

# Approved conditional on applying
model_pre_success_vs <- ulam(
  alist(
    pre_success ~ dbinom(solicitudes, p),
    
    logit(p) <- x[estrato]*sigma_z_estrato + alpha[estrato,year],
    
    transpars> matrix[estrato,12]:alpha <- compose_noncentered(sigma_estrato, L_Rho_estrato, z_estrato),
    matrix[12,estrato]:z_estrato ~ normal(0,1),
    
    x[estrato] ~ dnorm(0,1),
    sigma_z_estrato ~ dexp(1),
    z_values_estrato ~ dnorm(0,1),
    
    vector[12]: sigma_estrato ~ dexp(1),
    cholesky_factor_corr[12]:L_Rho_estrato ~ lkj_corr_cholesky(2),
    
    gq>matrix[12,12]:Rho_estrato <<- Chol_to_Corr(L_Rho_estrato),
    gq>vector[estrato]:a_estrato <<- x*sigma_z_estrato
    
    
  ), data = d_2013_onwards, chains = 4, cores = 8, iter = 4000, log_lik = T
)

Chequeos de robustez:

Aunque la distribución binomial es la distribución de máxima entropía para el tipo de datos que estoy usando, la cantidad de datos en algunos grupos (probablemente estratos 1 y 2) y sus predicciones pueden sesgar las inferencias. Sin embargo, no parce haber muchos casos preocupantes (valores Pareto \(> 1.0\)).

La siguiente tabla contiene la probabilidad marginal, por estrato, de tener una SA.

M DE IC 5.5% IC 94.5
Estrato 1 0.44 0.03 0.40 0.49
Estrato 2 0.43 0.02 0.40 0.45
Estrato 3 0.43 0.01 0.41 0.45
Estrato 4 0.49 0.01 0.47 0.51
Estrato 5 0.53 0.01 0.51 0.55
Estrato 6 0.57 0.01 0.55 0.59
Note:
M = Media. DE = Desviación estandar. IC = Intervalo de compatibilidad

La siguiente gráfica muestra la distribución de las probabilidades marginales estimadas por el modelo.

Probabilidad de ser B, condicional a tener SA

Acá está el modelo que estima la probabilidad de ser B, condicional a tener una SA, por estrato:

model_success_vs <- ulam(
  alist(
    success ~ dbinom(pre_success, p),
    
    logit(p) <- x[estrato]*sigma_z_estrato + alpha[estrato,year],
    
    transpars> matrix[estrato,17]:alpha <- compose_noncentered(sigma_estrato, L_Rho_estrato, z_estrato),
    matrix[17,estrato]:z_estrato ~ normal(0,1),
    
    x[estrato] ~ dnorm(0,1),
    sigma_z_estrato ~ dexp(1),
    z_values_estrato ~ dnorm(0,1),
    
    vector[17]: sigma_estrato ~ dexp(1),
    cholesky_factor_corr[17]:L_Rho_estrato ~ lkj_corr_cholesky(2),
    
    gq>matrix[17,17]:Rho_estrato <<- Chol_to_Corr(L_Rho_estrato),
    gq>vector[estrato]:a_estrato <<- x*sigma_z_estrato
    
  ), data = d_2008_onwards, chains = 4, cores = 8, iter = 4000, log_lik = T
)

Chequeo de robustez con PSIS y WAIC:

Probabilidad marginal, por estrato, de ser B, condicional a tener una SA:

M DE IC 5.5% IC 94.5
Estrato 1 0.53 0.05 0.45 0.62
Estrato 2 0.63 0.03 0.59 0.67
Estrato 3 0.67 0.02 0.64 0.70
Estrato 4 0.73 0.02 0.70 0.75
Estrato 5 0.76 0.02 0.74 0.79
Estrato 6 0.81 0.01 0.78 0.83
Note:
M = Media. DE = Desviación estandar. IC = Intervalo de compatibilidad

Finalmente, la siguiente gráfica contiene las distribuciones de cada probabilidad estimada.

Para terminar

Con este ejercicio, espero haber aportado a la discusión seria e informada sobre la situación actual entre Colfuturo y el gobierno.

Aunque claramente tengo una opinión firme respecto de la decisión del gobierno, preferiría omitirla acá, toda vez que aspiro a que el material que presento acá sirva de referencia, no para avanzar ninguna posición en particular.


  1. McElreath, R. (2020). Statistical Rethinking: A Bayesian Course with Examples in R and STAN (2nd ed.). Chapman & Hall.↩︎